








/* ===================== /js/commons.js ===================== */
function openPopUp( url, width, height ) {
    if( width == undefined )
        width = 500;

    if( height == undefined )
        height = 400;

    popupWindow = window.open( url, "popup", "width=" + width + ",height=" + height + ",resizable=yes,scrollbars=yes,status=no,menubar=no" );
    popupWindow.focus();
}

function collapseElement(elementId) {
    var el = document.getElementById(elementId);

    if (el.style.display == 'none')
        el.style.display = '';
    else el.style.display = 'none';
}

function showElement(elementId) {
    var el = document.getElementById(elementId);
    el.style.display = '';
}

function hideElement(elementId) {
    var el = document.getElementById(elementId);
    el.style.display = 'none';
}

function manageAjaxNotification() {
     if (req.readyState == 4) {
        if (req.status == 200) {

            var result = trim(req.responseText);
            var message = eval(result);

            if (message.type == 'error') {
                //alert('error');
                document.getElementById('errorMessage').innerHTML=message.message;
                document.getElementById('errorMessage').style.display='inline';
                window.setTimeout("document.getElementById('errorMessage').style.display='none'", 2000);
            }

            else if (message.type == 'success') {
                document.getElementById('message').innerHTML=message.message;
                document.getElementById('message').style.display='inline';
                window.setTimeout("document.getElementById('message').style.display='none'", 2000);
            }
            //stopLoading();
        }
        else {
            //createErrorMessage?
        }
    }
}

function AjaxActionMessage(message,type) {
    this.message = message;
    this.type = type;
}

function findPosX(obj) {
    var curleft = 0;
    if(obj.offsetParent)
        while(1)
        {
            curleft += obj.offsetLeft;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;

    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
            curtop += obj.offsetTop;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

/**
disabilita le date del calendario precedenti ad oggi
*/
function calendarFromYesterdayDisable(date) {
    var today = new Date();
    today.setDate(today.getDate()-1);
    if (date < today )
        return "disabled";
    else
        return false;
}

/**
disabilita le date del calendario cui è associato a partire dalla data presente nel calendario con id "from"
*/
function calendarDisableFromFrom(date) {
    var otherDateString = document.getElementById("from").value;
    var otherDateStringSplit = otherDateString.split("/");
    var otherDate = new Date();
    otherDate.setYear(otherDateStringSplit[2]);
    otherDate.setMonth(otherDateStringSplit[1]-1);
    otherDate.setDate(otherDateStringSplit[0]);
    //otherDate.setHours(0,0,0,0);
    //alert(date+" ---  "+otherDate);
    
    if (date < otherDate) {
        //alert("disable: "+date);
        return "disabled";
    }
    else {
        //alert("enable: "+date);
        return false;
    }
}




/* ===================== /js/ajax-commons.jsp ===================== */



function postFormData( formElem, callbackName) {
    // composizione dei parametri
    var formParam = "dosearch=true";

    var formInput;
    for( var i=0; i < formElem.elements.length; i++ )
    {
      formInput = formElem.elements[i];
      if (!formInput.disabled) {
        if( formInput.type == 'text' )
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.value);
        else if( formInput.type == 'hidden' )
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.value);
        else if( formInput.type == 'radio' && formInput.checked )
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.value);
        else if (formInput.type == 'checkbox' && formInput.checked )
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.value);
        else if( formInput.type == 'select-one' && formInput.options[ formInput.selectedIndex ].value != "" )
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.options[ formInput.selectedIndex ].value);
        else if( formInput.type == 'select-multiple' )
        {
            for( var j=0; j < formInput.options.length; j++ )
                if( formInput.options[j].selected )
                    formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.options[j].value);
        }
        else if( formInput.type == 'textarea' ) {
            formParam += "&" + formInput.name + "=" + encodeURIComponent(formInput.value);
        }
        // else
        //    alert( formInput.name + "/" + formInput.type + " non supported" );
      }

    }

    // alert( formParam );
    // start dell'immagine di loading
    startLoading();

    /*
    alert(
            "formParam = " + formParam + "\n" +
            "action = "  + formElem.action + "\n"
    );
    */

    // esecuzione della richiesta
    req = getXmlHttp();

    if(req!=null) {
        req.onreadystatechange = eval( callbackName );
        req.open( "post", formElem.action, true);
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        req.send( formParam );
    }

    return false;
}

/*
esegue la get di <url> e richiama la funzione il cui nome ï¿½ in <callbackName>
*/
function getUrl( url, callbackName ) {
    // esecuzione della richiesta
    req = getXmlHttp();
    if(req!=null) {
        req.onreadystatechange = eval( callbackName );
        //alert( url + ", " + callbackName );
        //req.onreadystatechange = callbackName;
        req.open( "get", url, true);
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        req.send( null );
    }
    startLoading();
}

/*
funzione cross-browser per ottenere l'oggetto XmlHttpRequest
*/
function getXmlHttp() {
  req = null;
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  return req;
}


/*
fa il trim di una stringa
*/
function trim(stringa) {
    reTrim = /\s+$|^\s+/g;
    return stringa.replace(reTrim,"");
}

/*
fa partire il loading
*/
function startLoading() {
    if(document.getElementById("dxColumn")) document.getElementById("dxColumn").innerHTML = "<img align='middle' src='/img/icon/loading.gif' alt='Loading details...'>";
}

/*
ferma il loading
*/
function stopLoading() {
    if(document.getElementById("loading")) document.getElementById("loading").style.display = "none"
}


/************** QueryResult JS Object *******************************************************************************/
QueryResult = function( columns, data, currentPage, totItems, totPages, searchUrl, sortColumn, mode ) {
    this.columns        = columns;
    this.data           = data;
    this.currentPage    = currentPage;
    this.totItems       = totItems;
    this.totPages       = totPages;
    this.sortColumn     = sortColumn;
    this.mode           = mode;


    if( searchUrl.indexOf( "?" ) < 0 )
        searchUrl += "?";
    else
        searchUrl += "&";

    this.searchUrl      = searchUrl;
}

QueryResult.prototype.getSortColumn = function () {
    return this.sortColumn;
}

QueryResult.prototype.setMode = function (mode) {
    this.mode = mode;
}

QueryResult.prototype.getMode = function () {
    return this.mode;
}

QueryResult.prototype.getColumns = function () {
    return this.columns;
}

QueryResult.prototype.getData = function () {
    return this.data;
}

QueryResult.prototype.getCurrentPage = function () {
    return this.currentPage;
}

QueryResult.prototype.getTotItems = function () {
    return this.totItems;
}

QueryResult.prototype.getTotPages = function () {
    return this.totPages;
}

QueryResult.prototype.getSearchUrl = function () {
    return this.searchUrl;
}


QueryResult.prototype.getPaginazione = function () {
    var orderedSearchUrl = this.searchUrl;
    if( this.getSortColumn() != null && this.getSortColumn() != "" )
    {
        orderedSearchUrl += "sort=" + this.getSortColumn();

        if( this.getMode() == null )
            orderedSearchUrl += "&mode=false";
        else
            orderedSearchUrl += "&mode="+this.getMode();
        orderedSearchUrl += "&";
        //alert(orderedSearchUrl);
    }

    var firstLink   = orderedSearchUrl + "p=0";
    var prevLink    = orderedSearchUrl + "p=" + (this.getCurrentPage() - 1);
    var nextLink    = orderedSearchUrl + "p=" + (this.getCurrentPage() + 1);
    var lastLink    = orderedSearchUrl + "p=" + (this.getTotPages() - 1);

    var result = "<div class='research_pages'>"+
                 "<table width='100%' border='0' cellspacing='0' cellpadding='0' height='25'>"+
                 "<tbody>"+
                    "<tr>"+
                    "<td width='28%'>"+
                        "<div class='float_left'>" + this.getTotItems() + " ???label.results???</div>" +
                    "</td>"+
                    "<td width='16%'>"+
                        "<div style='float:right;'>"+
                        ( this.getCurrentPage() > 0 ? "<a href='javascript:getUrl(\"" + firstLink + "\", \"manageDoSearch\")'>???label.first_page???&nbsp;</a>" : "" ) +
                        ( this.getCurrentPage() > 0 ? "<a href='javascript:getUrl(\"" + prevLink + "\", \"manageDoSearch\")'>???label.prev_page???&nbsp;</a>" : "" ) +
                        "</div>"+
                    "</td>"+
                    "<td align='center' width='10%'>"+
                           "            &nbsp;???label.page??? " + (this.getTotPages() > 0 ? this.getCurrentPage()+1 : 0) + " ???label.of??? " + this.getTotPages() + "&nbsp;" +
                    "</td>" +
                    "<td width='16%'>"+
                            ( this.getCurrentPage() < this.getTotPages()-1 ? "<a href='javascript:getUrl(\"" + nextLink + "\", \"manageDoSearch\")'>???label.next_page???</a>" : "" ) +
                            ( this.getCurrentPage() < this.getTotPages()-1 ? "<a href='javascript:getUrl(\"" + lastLink + "\", \"manageDoSearch\")'>&nbsp;???label.last_page???</a>" : "" ) +
                    "</td>" +
                "      <td width='28%'>" +
                "          <div class='float_right' >???label.go_to_page???: " +
                "            <select onchange='getUrl( \"" + orderedSearchUrl + "p=\" + this.options[ this.selectedIndex ].value , \"manageDoSearch\")'>";
                                 for( var i=0; i<this.getTotPages(); i++ )
                                 result += "         <option value='" + i + "' " + ( i == this.getCurrentPage() ? "selected" : "" ) + " >&nbsp;" + (i+1) +"&nbsp;</option>";
                                 result +=
                "            </select>" +
                "          </div>" +
                "      </td>" +
                    "</tr>"+
                 "</tbody>"+
                 "</table>"+
                 "</div>"+
                 "<div class='index_result_background' style='padding:0px;clear:both;'>"+
                    "<table id='result_search' width='100%' border='0' cellpadding='0' cellspacing='0' >"+
                        "<tbody>"+
                            "<tr style='background:#F1EFE2;'>";
                                for ( var i = 0; i <this.getColumns().length; i++)
                                    if (this.getColumns()[i].length == 2)
                                        if (this.getColumns()[i][1] == this.getSortColumn())
                                            if (this.getMode() == 'asc')
                                                result += "<td class='result_sortable_up'>"+this.getColumns()[i][0]+"</td>";
                                            else
                                                result += "<td class='result_sortable_down'>"+this.getColumns()[i][0]+"</td>";
                                        else
                                            result += "<td class='result_sortable_default'>"+this.getColumns()[i][0]+"</td>";
                                    else
                                        result += "<td class='result_separator'>"+this.getColumns()[i][0]+"</td>";
                                result+=
                            "</tr>";
                            for ( var i = 0; i <this.data.length; i++) {
                                result+="<tr class='" + this.data[i][0] + "'>";
                                        for (var j = 1; j<this.getColumns().length+1; j++) {
                                            result+="<td>"+
                                                    this.data[i][j]+
                                                    "</td>";
                                        }
                                        result+=
                                        "</tr>";
                            }
                        result +=
                        "</tbody>"+
                    "</table>"+
                 "</div>";

    return result;
}



/* ===================== /js/tabs-ajax.js ===================== */

//gestisce il sotto menu a tab quando si fa una ricerca di un apt
function manageLoadTab() {
    
    if (req.readyState == 4) {
        if (req.status == 200) {
            document.getElementById('tab_content').innerHTML = req.responseText;
            
        }
    }

}

function handleTab(theTab) {
    var results = document.getElementById('results');
    var resultsInnerLabel =document.getElementById('results_label');

    var intro = document.getElementById('intro');
    var introInnerLabel =document.getElementById('intro_label');

    var services = document.getElementById('services');
    var servicesInnerLabel =document.getElementById('services_label');

    var prices = document.getElementById('prices');
    var pricesInnerLabel =document.getElementById('prices_label');


    var apartmentTab = document.getElementById("tab_content_apt");
    var contentTab =document.getElementById("tab_content"); 

    theTab.className="m1_important";
    var innerLabel = theTab.id+'_label';
    document.getElementById(innerLabel).className="m_citta_label_important";

    if (theTab.id=='intro') {
        apartmentTab.style.display='none';
        contentTab.style.display='block';
        results.className = "m1_b1";
        resultsInnerLabel.className = "m_citta_label";

        services.className = "m1_b1";
        servicesInnerLabel.className = "m_citta_label";
        prices.className = "m1_b1";
        pricesInnerLabel.className = "m_citta_label";
    }

    if (theTab.id=="services") {
        apartmentTab.style.display='none';
        contentTab.style.display='block';
        results.className = "m1_b1";
        resultsInnerLabel.className = "m_citta_label";
        intro.className = "m1_b1";
        introInnerLabel.className = "m_citta_label";
        prices.className = "m1_b1";
        pricesInnerLabel.className = "m_citta_label";
    }

    if (theTab.id=="prices") {
        apartmentTab.style.display='none';
        contentTab.style.display='block';
        results.className = "m1_b1";
        resultsInnerLabel.className = "m_citta_label";
        intro.className = "m1_b1";
        introInnerLabel.className = "m_citta_label";
        services.className = "m1_b1";
        servicesInnerLabel.className = "m_citta_label";
    }

    if (theTab.id=="results") {
        apartmentTab.style.display='block';
        contentTab.style.display='none';
        prices.className = "m1_b1";
        pricesInnerLabel.className = "m_citta_label";
        intro.className = "m1_b1";
        introInnerLabel.className = "m_citta_label";
        services.className = "m1_b1";
        servicesInnerLabel.className = "m_citta_label";

    }


}

function handleSearchTab(theTab) {
    var results = document.getElementById('results');
    var resultsInnerLabel = document.getElementById('results_label');
    var services = document.getElementById('services');
    var servicesInnerLabel = document.getElementById('services_label');
    var prices = document.getElementById('prices');
    var pricesInnerLabel = document.getElementById('prices_label');


    var cityTab = document.getElementById("tab_content_city");
    var contentTab =document.getElementById("tab_content");


    theTab.className="m1_important";
    var innerLabel = theTab.id+'_label';
    document.getElementById(innerLabel).className="m_citta_label_important";

    if (theTab.id=="services") {
        cityTab.style.display='none';
        contentTab.style.display='block';

        results.className = "m1_b1";
        resultsInnerLabel.className = "m_citta_label";
        prices.className = "m1_b1";
        pricesInnerLabel.className = "m_citta_label";
    }

    if (theTab.id=="prices") {
        cityTab.style.display='none';
        contentTab.style.display='block';

        results.className = "m1_b1";
        resultsInnerLabel.className = "m_citta_label";
        services.className = "m1_b1";
        servicesInnerLabel.className = "m_citta_label";
    }

    if (theTab.id=="results") {
        cityTab.style.display='block';
        contentTab.style.display='none';

        prices.className = "m1_b1";
        pricesInnerLabel.className = "m_citta_label";
        services.className = "m1_b1";
        servicesInnerLabel.className = "m_citta_label";

    }


}







/* ===================== /js/preview_templates.js ===================== */
/*
Simple Image Trail script- By JavaScriptKit.com
Visit http://www.javascriptkit.com for this script and more
This notice must stay intact
*/

var offsetfrommouse=[15,15]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var displayduration=0; //duration in seconds image should remain visible. 0 for always.

var defaultimageheight = 100;	// maximum image size.
var defaultimagewidth = 100;	// maximum image size.

var timer;

function gettrailobj(){
    if (document.getElementById)
        return document.getElementById("preview_div").style
}

function gettrailobjnostyle(){
    if (document.getElementById)
        return document.getElementById("preview_div")
}


function truebody(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}


function hidetrail(){	
	gettrailobj().display= "none";
	document.onmousemove=""
	gettrailobj().left="-500px"
	clearTimeout(timer);
}

function showtrail(imagename,title,width,height){
	i = imagename
	t = title
	w = width
	h = height
	timer = setTimeout("show('"+i+"',t,w,h);",0);
}
function show(imagename,title,width,height){
 
    var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth - offsetfrommouse[0]
	var docheight=document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(window.innerHeight)

	if( (navigator.userAgent.indexOf("Konqueror")==-1  ||
         navigator.userAgent.indexOf("Firefox")!=-1 ||
         (navigator.userAgent.indexOf("Opera")==-1 && navigator.appVersion.indexOf("MSIE")!=-1))
        ) {
		( width == 0 ) ? width = defaultimagewidth: '';
		( height == 0 ) ? height = defaultimageheight: '';
			
		width+=30
		height+=55
		defaultimageheight = height
		defaultimagewidth = width
	
		document.onmousemove=followmouse; 

		
		newHTML = '<div id="border_preview" class="border_preview"><div id="loader_container"><div id="loader"><div align="center">Loading image...</div><div id="loader_bg"><div id="progress"> </div></div></div></div>';
		//newHTML = newHTML + '<h2 class="title_h2">' + ' '+title + '</h2>'
		
    	newHTML = newHTML + '<div class="preview_temp_load" ><img id="preview_image" onload="javascript:remove_loading();resize_container();" src="' + imagename + '" border="0" style1="margin-bottom:10px;"></div>';
		newHTML = newHTML + '</div>'; 
		
		if(navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1 ){
			newHTML = newHTML+'<iframe id="preview_iframe" src="about:blank" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'"></iframe>';
		}

		gettrailobjnostyle().innerHTML = newHTML;
		gettrailobj().display="block";
	}
}

function followmouse(e){

	var xcoord=offsetfrommouse[0];
	var ycoord=offsetfrommouse[1];

    var borderPreviewDiv = document.getElementById("border_preview");
    //var divHeight = borderPreviewDiv.style.height;
    //var divWidth  = borderPreviewDiv.style.width;

    var divHeight = Number(gettrailobj().height.split("px")[0]);
    var divWidth  = Number(gettrailobj().width.split("px")[0]);

    //alert( "divHeight=" + divHeight + "\ndivWidth=" + divWidth );

    //var divHeight = defaultimageheight;
      //var divWidth  = defaultimagewidth;

    var docwidth  = document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15
	var docheight = document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(window.innerHeight)

	if (typeof e != "undefined"){
		if (docwidth - e.pageX < divWidth + 2*offsetfrommouse[0]){
			xcoord = e.pageX - xcoord - divWidth; // Move to the left side of the cursor
		} else {
			xcoord += e.pageX;
		}
		if (docheight - e.pageY < divHeight + 2*offsetfrommouse[1]){
			ycoord += e.pageY - Math.max(0,(2*offsetfrommouse[1] + divHeight + e.pageY - docheight - truebody().scrollTop));
		} else {
			ycoord += e.pageY;
		}

	} else if (typeof window.event != "undefined"){
		if (docwidth - event.clientX < divWidth + 2*offsetfrommouse[0]){
			xcoord = event.clientX + truebody().scrollLeft - xcoord - divWidth; // Move to the left side of the cursor
		} else {
			xcoord += truebody().scrollLeft+event.clientX
		}
		if (docheight - event.clientY < (divHeight + 2*offsetfrommouse[1])){
			ycoord += event.clientY + truebody().scrollTop - Math.max(0,(2*offsetfrommouse[1] + divHeight + event.clientY - docheight));
		} else {
			ycoord += truebody().scrollTop + event.clientY;
		}
	}
	gettrailobj().left=xcoord+"px"
	gettrailobj().top=ycoord+"px"

}

function resize_container() {
    var borderPreviewDiv = document.getElementById("border_preview");
    var iframePreview    = document.getElementById("preview_iframe");
    var image = document.getElementById("preview_image");
    //alert(image.height+" "+image.width);
    borderPreviewDiv.style.height = (image.height+20)+"px";
    borderPreviewDiv.style.width = (image.width+20)+"px";

    gettrailobj().height = (image.height+20)+"px";
    gettrailobj().width  = (image.width+20)+"px";

    if( iframePreview )
    {
        iframePreview.style.height = (image.height+20)+"px";
        iframePreview.style.width  = (image.width+20)+"px";   
    }
    
}




/* ===================== /js/loader.js ===================== */

var t_id = setInterval(animate,20);
var pos=0;
var dir=2;
var len=0;

function animate()
{
var elem = document.getElementById('progress');
if(elem != null) {
if (pos==0) len += dir;
if (len>32 || pos>79) pos += dir;
if (pos>79) len -= dir;
if (pos>79 && len==0) pos=0;
elem.style.left = pos;
elem.style.width = len;
}
}

function remove_loading() {
this.clearInterval(t_id);
var targelem = document.getElementById('loader_container');
targelem.style.display='none';
targelem.style.visibility='hidden';
var t_id = setInterval(animate,60);
}




/* ===================== /js/AC_RunActiveContent.js ===================== */
//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}




/* ===================== /js/validator.js ===================== */
// Title: Tigra Form Validator
// URL: http://www.softcomplex.com/products/tigra_form_validator/
// Version: 1.2
// Date: 07/11/2005 (mm/dd/yyyy)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.

// regular expressions or function to validate the format
var re_dt = /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/,
re_tm = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/,
a_formats = {
    'username': function ( s_username ) {
        if( document.getElementById( "isUserNameOk" ).value == "0" )
            return false;
        return true;
    },
	'alpha'   : /^[a-zA-Z\.\-]*$/,
	'alphanum': /^\w+$/,
	'unsigned': /^\d+$/,
	'integer' : /^[\+\-]?\d*$/,
	'real'    : /^[\+\-]?\d*\.?\d*$/,
    //'ammount' : /^[\+\-]?[\d(3)\.]*\d(3)\,?\d(2)*$/,
    'email'   : /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,
	'phone'   : /^[\d\.\s\-]+$/,
	'date'    : function (s_date) {
		// check format
		if (!re_dt.test(s_date))
			return false;
		// check allowed ranges
		if (RegExp.$1 > 31 || RegExp.$2 > 12)
			return false;
		// check number of day in month
		var dt_test = new Date(RegExp.$3, Number(RegExp.$2-1), RegExp.$1);
		if (dt_test.getMonth() != Number(RegExp.$2-1))
			return false;
		return true;
	},
	'time'    : function validate_time(s_time) {
		// check format
		if (!re_tm.test(s_time))
			return false;
		// check allowed ranges
		if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59)
			return false;
		return true;
	}
},
a_messages = [
	'nome della form passata al controllo non coretta ',
	'nessun campo della form  "%form%" � stato passato al controllo ',
	'Form  "%form%" not found in document',
	'Field "%n%" required',
	'Field "%n%" not found in form "%form%"',
	'Non trovo etichetta di campo (id="%t%") ',
	'Non posso verficare la consistenza del campo "%m%" perch� assente',
	'"%l%" required field',
	'il valore di "%l%" deve avere pi� di %mn% caratteri',
	'il valore di "%l%" deve avere massimo %mx% caratteri',
	'"%v%" incorrect for "%l%"',
	'"%l%" deve confrontarsi con "%ml%"'
]

// validator counstruction routine
function validator(s_form, a_fields, o_cfg) {
	this.f_error = validator_error;
	this.f_alert = o_cfg && o_cfg.alert
		? function(s_msg) { alert(s_msg); return false }
		: function() { return false };

	// check required parameters
	if (!s_form)
		return this.f_alert(this.f_error(0));
	this.s_form = s_form;

	if (!a_fields || typeof(a_fields) != 'object')
		return this.f_alert(this.f_error(1));
	this.a_fields = a_fields;

	this.a_2disable = o_cfg && o_cfg['to_disable'] && typeof(o_cfg['to_disable']) == 'object'
		? o_cfg['to_disable']
		: [];

	this.exec = validator_exec;
}

// validator execution method
function validator_exec() {
	var o_form = document.forms[this.s_form];
	if (!o_form)
		return this.f_alert(this.f_error(2));

	b_dom = document.body && document.body.innerHTML;

	// check integrity of the form fields description structure
	for (var n_key in this.a_fields) {
		// check input description entry
		this.a_fields[n_key]['n'] = n_key;
		if (!this.a_fields[n_key]['l'])
			return this.f_alert(this.f_error(3, this.a_fields[n_key]));
		o_input = o_form.elements[n_key];
		if (!o_input)
			return this.f_alert(this.f_error(4, this.a_fields[n_key]));
		this.a_fields[n_key].o_input = o_input;
	}

	// reset labels highlight
	if (b_dom)
		for (var n_key in this.a_fields)
			if (this.a_fields[n_key]['t']) {
				var s_labeltag = this.a_fields[n_key]['t'], e_labeltag = get_element(s_labeltag);
				if (!e_labeltag)
					return this.f_alert(this.f_error(5, this.a_fields[n_key]));
				this.a_fields[n_key].o_tag = e_labeltag;

				// normal state parameters assigned here
				e_labeltag.className = 'tfvNormal';
			}

	// collect values depending on the type of the input
	for (var n_key in this.a_fields) {
		var s_value = '';
		o_input = this.a_fields[n_key].o_input;
		if (o_input.type == 'checkbox') // checkbox
			s_value = o_input.checked ? o_input.value : '';
		else if (o_input.value) // text, password, hidden
			s_value = o_input.value;
		else if (o_input.options) // select
			s_value = o_input.selectedIndex > -1
				? o_input.options[o_input.selectedIndex].value
				: null;
		else if (o_input.length > 0) // radiobuton
			for (var n_index = 0; n_index < o_input.length; n_index++)
				if (o_input[n_index].checked) {
					s_value = o_input[n_index].value;
					break;
				}
		this.a_fields[n_key]['v'] = s_value.replace(/(^\s+)|(\s+$)/g, '');
	}

	// check for errors
	var n_errors_count = 0,
		n_another, o_format_check;
	for (var n_key in this.a_fields) {
		o_format_check = this.a_fields[n_key]['f'] && a_formats[this.a_fields[n_key]['f']]
			? a_formats[this.a_fields[n_key]['f']]
			: null;

		// reset previous error if any
		this.a_fields[n_key].n_error = null;

		// check reqired fields
		if (this.a_fields[n_key]['r'] && !this.a_fields[n_key]['v']) {
			this.a_fields[n_key].n_error = 1;
			n_errors_count++;
		}
		// check length
		else if (this.a_fields[n_key]['mn'] && this.a_fields[n_key]['v'] != '' && String(this.a_fields[n_key]['v']).length < this.a_fields[n_key]['mn']) {
			this.a_fields[n_key].n_error = 2;
			n_errors_count++;
		}
		else if (this.a_fields[n_key]['mx'] && String(this.a_fields[n_key]['v']).length > this.a_fields[n_key]['mx']) {
			this.a_fields[n_key].n_error = 3;
			n_errors_count++;
		}
		// check format
		else if (this.a_fields[n_key]['v'] && this.a_fields[n_key]['f'] && (
			(typeof(o_format_check) == 'function'
			&& !o_format_check(this.a_fields[n_key]['v']))
			|| (typeof(o_format_check) != 'function'
			&& !o_format_check.test(this.a_fields[n_key]['v'])))
			) {
			this.a_fields[n_key].n_error = 4;
			n_errors_count++;
		}
		// check match
		else if (this.a_fields[n_key]['m']) {
			for (var n_key2 in this.a_fields)
				if (n_key2 == this.a_fields[n_key]['m']) {
					n_another = n_key2;
					break;
				}
			if (n_another == null)
				return this.f_alert(this.f_error(6, this.a_fields[n_key]));
			if (this.a_fields[n_another]['v'] != this.a_fields[n_key]['v']) {
				this.a_fields[n_key]['ml'] = this.a_fields[n_another]['l'];
				this.a_fields[n_key].n_error = 5;
				n_errors_count++;
			}
		}

	}

	// collect error messages and highlight captions for errorneous fields
	var s_alert_message = '',
		e_first_error;

	if (n_errors_count) {
		for (var n_key in this.a_fields) {
			var n_error_type = this.a_fields[n_key].n_error,
				s_message = '';

			if (n_error_type)
				s_message = this.f_error(n_error_type + 6, this.a_fields[n_key]);

			if (s_message) {
				if (!e_first_error)
					e_first_error = o_form.elements[n_key];
				s_alert_message += s_message + "\n";
				// highlighted state parameters assigned here
				if (b_dom && this.a_fields[n_key].o_tag)
					this.a_fields[n_key].o_tag.className = 'tfvHighlight';
			}
		}
		alert(s_alert_message);
		// set focus to first errorneous field
		if (e_first_error.focus && e_first_error.type != 'hidden'  && !e_first_error.disabled)
			eval("e_first_error.focus()");
		// cancel form submission if errors detected
		return false;
	}

	for (n_key in this.a_2disable)
		if (o_form.elements[this.a_2disable[n_key]])
			o_form.elements[this.a_2disable[n_key]].disabled = true;

	return true;
}

function validator_error(n_index) {
	var s_ = a_messages[n_index], n_i = 1, s_key;
	for (; n_i < arguments.length; n_i ++)
		for (s_key in arguments[n_i])
			s_ = s_.replace('%' + s_key + '%', arguments[n_i][s_key]);
	s_ = s_.replace('%form%', this.s_form);
	return s_
}

function get_element (s_id) {
	return (document.all ? document.all[s_id] : (document.getElementById ? document.getElementById(s_id) : null));
}

